home *** CD-ROM | disk | FTP | other *** search
- unit Soundex;
-
- interface
-
- type
- SoundexString = String[4];
-
- function SoundexCode( TargetString: String ) : SoundexString;
-
- implementation
-
- uses SysUtils;
-
- type
- LetterMap = array [1..26] of char;
-
- const
-
- Code : LetterMap = (
- '0', '1', '2', '3', '0', '1', '2', '0', '0',
- '2', '2', '4', '5', '5', '0', '1', '2', '6',
- '2', '3', '0', '1', '0', '2', '0', '2'
- );
-
- function SoundexCode( TargetString: String ) : SoundexString;
- var
- ResultIndex: Integer;
- TargetIndex: Integer;
- TargetLength: Integer;
-
- begin
- TargetString := UpperCase( TargetString );
- Result := '0000';
- Result[1] := TargetString[1];
-
- TargetLength := Length( TargetString );
-
- if TargetLength = 1 then exit;
-
- for TargetIndex := 2 to TargetLength do
- if TargetString[ TargetIndex ] in [ 'A'..'Z' ] then
- { Map ordinary letters into Soundex code }
- TargetString[ TargetIndex ] :=
- Code[ Ord( TargetString[ TargetIndex ]) - Ord( 'A' ) + 1]
- else
- { Ignore any other character }
- TargetString[TargetIndex] := '0';
-
- ResultIndex := 2;
- for TargetIndex := 2 to TargetLength do
- begin
- if ( TargetString[ TargetIndex ] <> '0' ) and
- ( TargetString[ TargetIndex ] <>
- TargetString[ TargetIndex - 1 ] ) then
- begin
- Result[ ResultIndex ] := TargetString[ TargetIndex ];
- inc( ResultIndex );
- if ResultIndex > 4 then exit
- end;
- end;
-
- end;
-
- end.
-